#include<func.h>
int main()
{
    int sem_id=semget(1000,2,IPC_CREAT|0600);
    ERROR_CHECK(sem_id,-1,"semget")
    unsigned short arr[2]={0,10};
    int ret=semctl(sem_id,0,SETALL,arr);
    ERROR_CHECK(ret,-1,"semctl")
    if(!fork())
    {//customer
        struct sembuf sopp,sopv;
        sopp.sem_num=0;
        sopp.sem_op=-1;
        sopp.sem_flg=SEM_UNDO;
        sopv.sem_num=1;
        sopv.sem_op=1;
        sopv.sem_flg=SEM_UNDO;
        while(1)
        {
            printf("i am customer,product %d,empty %d\n",semctl(sem_id,0,GETVAL),semctl(sem_id,1,GETVAL));
            semop(sem_id,&sopp,1);
            printf("geting product...\n");
            semop(sem_id,&sopv,1);
            printf("i am customer product %d,empty %d\n",semctl(sem_id,0,GETVAL),semctl(sem_id,1,GETVAL));
            sleep(2);
        }
    } 
    else
    {
        struct sembuf sopp,sopv;
        sopp.sem_num=1;
        sopp.sem_op=-1;
        sopp.sem_flg=SEM_UNDO;
        sopv.sem_num=0;
        sopv.sem_op=1;
        sopv.sem_flg=SEM_UNDO;
        while(1)
        {
            printf("i am producter,product %d,empty %d\n",semctl(sem_id,0,GETVAL),semctl(sem_id,1,GETVAL));
            semop(sem_id,&sopp,1);
            printf(" producting...\n");
            semop(sem_id,&sopv,1);
            printf("i am producter product %d,empty %d\n",semctl(sem_id,0,GETVAL),semctl(sem_id,1,GETVAL));
            sleep(1);
        }
    }
}